PowerShellでassume-roleを楽にするツールaws-masqueradeを使ってみた
こんにちはCX事業本部IoT事業部のさかじです。 IAMロールを切り替えることがPowerShellで手軽に切り替えられないかなと、社内Slackに投げた所、作者本人の夏目さんから紹介を受けたので使ってみました。
環境
- Windows10
前提条件
- AWS CLIがインストールしてあること
PS C:\> aws --version aws-cli/2.7.7 Python/3.9.11 Windows/10 exe/AMD64 prompt/off
はじめに
今回実施したかったスイッチロールする方法はAWS CLIの標準機能を使用して実施できます。しかし、MFAの自動認証ができるなど手間を省ける機能がありますので、aws-masquerade
というツールを使ってみました。
やってみた
※ ビルド済みのバイナリをこちらからダウンロードできます。ビルド済みバイナリを使う場合には以下の作業は不要です。
- Visual Studioビルドツールインストール
- Rustインストール
Visual Studioビルドツールインストール
Build Tools for Visual Studio 2022インストール
ダウンロードページ
ダウンロードされた vs_BuildTools.exe
を起動します。
インストーラーが起動します。
「C++によるデスクトップ開発」「.NETデスクトップビルドツール」「ユニバーサルWindowsプラットフォームビルドツール」を選択して「インストール」をクリックします。
インストール進行状況
インストールが完了しましたら再起動します。
Rustインストール
Rustをインストールページへ行き、[RUSTUP-INIT.EXE(64BIT)]をダウンロードします。
※ 環境に合わせてダウンロードしてください。
ダウンロードしたrustup-init.exe
を起動します。
1
を選択して進めます。
インストールが終了しましたら、PowerShellを起動します。
バージョンをチェックします。
PS C:\> cargo --version cargo 1.61.0 (a028ae42f 2022-04-29) PS C:\> rustc -V rustc 1.61.0 (fe5b13d68 2022-05-18) PS C:\> rustup -V rustup 1.24.3 (ce5817a94 2021-05-31) info: This is the version for the rustup toolchain manager, not the rustc compiler. info: The currently active `rustc` version is `rustc 1.61.0 (fe5b13d68 2022-05-18)` PS C:\> rustup show Default host: x86_64-pc-windows-msvc rustup home: C:\Users\ユーザ名\.rustup stable-x86_64-pc-windows-msvc (default) rustc 1.61.0 (fe5b13d68 2022-05-18) PS C:\>
aws-masqueradeを使ってみる
aws-masqueradeのインストール
PS C:\> cargo install aws-masquerade PS C:\> aws-masquerade.exe --version aws-masquerade 0.2.2
プロファイルを追加
PS C:\> aws-masquerade.exe add account name (required): test ※1 source profile name []: source_profile ※2 role arn (required): arn:aws:iam::123456789012:role/RoleName mfa arn []: arn:aws:iam::123456789012:mfa/UserName mfa secret []: xxxxxxxxxxxxxxxxxxxxxxxx ※3 Select Credential Output Type: [0] SharedCredentials [1] bash [2] fish [3] PowerShell > [0]: 3 Select awscli output type: [0] json [1] text [2] table > []: 1 Default Region Name []: ap-northeast-1
- ※1 : プロファイル名を入力します
- ※2 :
~\.aws\credentials
に定義しているプロファイル名を入力します - ※3 : MFAを設定するためのシークレット設定キー。わからない場合には入力しなくても使用できます
すべて入力すると設定したjsonが作成されますので問題なければ y
を入力して完了です。
{ "test": { "sourceProfile": "classmethod", "roleArn": "arn:aws:iam::123456789012:role/RoleName", "mfaArn": "arn:aws:iam::123456789012:mfa/UserName", "mfaSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "credentialOutput": "PowerShell", "output": "text", "region": "ap-northeast-1" } } Do you confirm add account? (y/n) [y]: y
assume-roleしてみる
MFAシークレット設定キー設定済みの場合
PS C:\> aws-masquerade.exe assume -a test | Invoke-Expression PS C:\>
これで完了です。
MFAシークレット設定キー設定されていない場合
コマンドを実行すると各環境設定ファイルが表示されます。これらをコピーし環境設定そのまま実行すると環境設定が行われます。
PS C:\> aws-masquerade.exe assume -a test MFA TOKEN: 123456 $env:AWS_ACCESS_KEY_ID="xxxxxxxxxxxxxxxxxxx" $env:AWS_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxx" $env:AWS_SESSION_TOKEN="xxxxxxxxxxxxxxxxxxxxx" $env:AWS_SECURITY_TOKEN="xxxxxxxxxxxxxxx" $env:AWS_DEFAULT_OUTPUT="text" $env:AWS_DEFAULT_REGION="ap-northeast-1" コマンド実行 PS C:\> $env:AWS_ACCESS_KEY_ID="xxxxxxxxxxxxxxxxxxx" PS C:\> $env:AWS_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxx" PS C:\> $env:AWS_SESSION_TOKEN="xxxxxxxxxxxxxxxxxxxxx" PS C:\> $env:AWS_SECURITY_TOKEN="xxxxxxxxxxxxxxx" PS C:\> $env:AWS_DEFAULT_OUTPUT="text" PS C:\> $env:AWS_DEFAULT_REGION="ap-northeast-1"
assume-roleされたか確認します。今回はS3にあるファイル一覧を取得します。
PS C:\> aws s3 ls 2022-06-18 19:43:33 xxx 2020-02-20 08:07:56 xxx 2020-06-12 02:50:43 xxx
使用したいRoleが複数ある場合
aws-masquerade.exe add
コマンドを実行し、必要な情報を設定し使い分けることができます。
参考サイト
- IAM ロールへの切り替え (Tools for Windows PowerShell)
- GitHub aws-masquerade
- Windows で Rust 用の開発環境を設定する
- Rustのバージョン確認
最後に
昨年まではMacを使用していたため、不自由していなかったのですがWindowsPCに変更して少しでもPowerShellと仲良くなりたいと思い、弊部のSlackへぼやいた所素敵なツール(それも作者)を紹介してもらい非常に助かりました。